package com.jajahome.util;

import android.text.TextUtils;

import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 类描述：字符串工具类
 * 创建人：admin
 * 创建时间：2016/5/4 9:21
 * 修改人：admin
 * 修改时间：2016/5/4 9:21
 * 修改备注：
 */
public class StringUtil {

    /**
     * 字符串是否为空
     *
     * @param text ：要判断的字符串
     * @return ：是否为空
     */
    public static boolean isEmpty(String text) {
        return null == text || "".equals(text) || " ".equals(text) || "null".equals(text) || text.length() == 0;
    }

    /**
     * 是否是手机号码
     *
     * @return true是 false不是
     */
    public static boolean isTel(String str) {
        Pattern p = Pattern
                .compile("^((13[0-9])|(14[[0-9]])|(17[0-9])||(15[0-9])|(16[0-9])|(19[0-9])|(18[0-9]))\\d{8}$");
        Matcher m = p.matcher(str);
        return m.matches();
    }

    public static boolean isAllNum(String str) {
        Pattern pattern = Pattern.compile("[0-9]*");
        return pattern.matcher(str).matches();
    }

    public static boolean isAllChar(String str) {
        return str.matches("^[a-zA-Z]*");
    }

    /**
     * 验证邮箱格式是否正确
     */
    public static boolean isEmail(String email) {
        String regex = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
        return email.matches(regex);
    }

    /**
     * 比较图形验证码是相同
     *
     * @param code0
     * @param code1
     * @return
     */
    public static boolean isAuthCodeSame(String code0, String code1) {
        if (isEmpty(code0) || isEmpty(code1)) return false;
        String lowerCode0 = code0.toLowerCase();
        String lowerCode1 = code1.toLowerCase();
        return lowerCode0.equals(lowerCode1);
    }

    /**
     * 判断字符串是否就FLOAT
     */

    public static boolean isFloat(String msg) {
        if (msg.contains(".")) {
            String[] code = msg.split("\\.");
            String code1 = code[0];
            String code2 = code[1];
            if (!isEmpty(code1) && !isEmpty(code2) && IdCheckUtil.isNumer(code1) && IdCheckUtil.isNumer(code2)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断字符串是否是FLOAT并小于1
     */

    public static boolean isEnoughFloat(String msg) {
        if (msg.contains(".")) {
            String[] code = msg.split("\\.");
            String code1 = code[0];
            String code2 = code[1];
            if (!isEmpty(code1) && !isEmpty(code2) && IdCheckUtil.isNumer(code1) && IdCheckUtil.isNumer(code2)) {
                int str = Integer.parseInt(code1);
                if (str == 0) {
                    return true;
                } else {
                    return false;
                }
            }
        }
        return false;

    }

    public static boolean isHuZhi(String s) {
        if (s.matches("\\d+(.\\d+)?")) {
            if (s.indexOf(".") > 0) {
                //System.out.println("浮点类型");
                return true;
            } else {
                // System.out.println("整形类型");
                return true;
            }
        } else {
            // System.out.println("不是数值类型");
            return false;
        }
    }

    //字符串截取

    public static String spilStr(String msg) {

        if (msg.contains(".")) {
            int position = msg.indexOf(".");
            for (int j = 0; j < msg.length(); j++) {
                msg = msg.substring(0, position);
            }
            return msg;
        }
        return "";
    }

    public static String spilStr1(String msg) {
        String start = null;
        String end = null;
        if (msg.contains(".")) {
            int position = msg.indexOf(".");
            end = msg.substring(position + 1, msg.length());
            start = msg.substring(0, position);
            if (end.equals("0")) {
                return start;
            }
            return msg;
        }
        return "";
    }

    /**
     * 按字节截取字符串 ，指定截取起始字节位置与截取字节长度
     *
     * @param orignal 要截取的字符串
     * @param offset  截取Byte长度；
     * @return 截取后的字符串
     * @throws UnsupportedEncodingException
     */
    public static String substringByte(String orignal, int start, int count) {
        //如果目标字符串为空，则直接返回，不进入截取逻辑；
        if (orignal == null || "".equals(orignal)) return orignal;
        //截取Byte长度必须>0
        if (count <= 0) return orignal;
        //截取的起始字节数必须比
        if (start < 0) start = 0;
        //目标char Pull buff缓存区间；
        StringBuffer buff = new StringBuffer();
        try {
            //截取字节起始字节位置大于目标String的Byte的length则返回空值
            if (start >= getStringByteLenths(orignal)) return null;
            // int[] arrlen=getByteLenArrays(orignal);
            int len = 0;
            char c;
            //遍历String的每一个Char字符，计算当前总长度
            //如果到当前Char的的字节长度大于要截取的字符总长度，则跳出循环返回截取的字符串。
            for (int i = 0; i < orignal.toCharArray().length; i++) {
                c = orignal.charAt(i);
                //当起始位置为0时候
                if (start == 0) {
                    len += String.valueOf(c).getBytes("utf-8").length;
                    if (len <= count) buff.append(c);
                    else break;
                } else {
                    //截取字符串从非0位置开始
                    len += String.valueOf(c).getBytes("utf-8").length;
                    if (len >= start && len <= start + count) {
                        buff.append(c);
                    }
                    if (len > start + count) break;
                }
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //返回最终截取的字符结果;
        //创建String对象，传入目标char Buff对象
        return new String(buff);
    }

    /**
     * 计算当前String字符串所占的总Byte长度
     *
     * @param args 要截取的字符串
     * @return 返回值int型，字符串所占的字节长度，如果args为空或者“”则返回0
     * @throws UnsupportedEncodingException
     */
    public static int getStringByteLenths(String args) throws UnsupportedEncodingException {
        return args != null && args != "" ? args.getBytes("utf-8").length : 0;
    }

    public static String fakePhone(String nickName){
        if(!TextUtils.isEmpty(nickName) && StringUtil.isTel(nickName)){
            //如果是手机号隐藏后四位
            if(nickName.length() == 11){
                nickName = nickName.substring(0 ,3)+"****"+nickName.substring(7,11);
            }
        }
        return nickName;
    }

}
